package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.anno.CacheFind;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import com.jt.util.ObjectMapperUtil;
import com.jt.vo.EasyUITree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;

@Service
public class ItemCatServiceImpl implements ItemCatService{

    @Autowired
    private ItemCatMapper itemCatMapper;

    @Override
    public String getObjectById(Long id) {
        String name=itemCatMapper.selectById(id).getName();
        return name;
    }

    /**
     * 思路:
     *  1.通过parentId查询数据库信息,返回结果List<ItemCat>
     *  2.将ItemCat的信息转化为EasyUITree
     *  3.返回的是List<EasyUITree>
     */
    @Override
    @CacheFind(key = "Item_Cat_List")
    public List<EasyUITree> findItemCatList(Long parentId) {
        QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("parent_id",parentId);
        List<ItemCat> list=itemCatMapper.selectList(queryWrapper);


        //2.需要将数据进行转换,list进行遍历,封装EasyUITree添加到集合即可
        List<EasyUITree> treeList=new ArrayList<>();
        for(ItemCat itemCat:list){
            Long id=itemCat.getId();
            String text=itemCat.getName();
            //是父级就打开 否则关闭
            String state=itemCat.getIsParent()?"closed":"open";
            EasyUITree easyUITree=new EasyUITree(id,text,state);
            treeList.add(easyUITree);
        }
        return treeList;
    }

    /**
     * 流程:1.先查询redis的缓存
     *          true 则直接返回数据
     *          flase 查询书就库
     *
     *   key特点: 1.动态变化  2.标识业务属性
     *         key:Item_Cat_List::parentId
     *
     * @param parentId
     * @return
     */
    /*@Override
    public List<EasyUITree> findItemCache(Long parentId) {
        String key = "Item_Cat_List::"+parentId;
        List<EasyUITree> list = new ArrayList<>();
        Long startTime = System.currentTimeMillis();
        if(jedis.exists(key)){
            String json = jedis.get(key);
            list = ObjectMapperUtil.toObject(json, list.getClass());
            Long endTime = System.currentTimeMillis();
            System.out.println("缓存时间为:"+(endTime-startTime));
        }else {
            list = findItemCatList(parentId);
            String json = ObjectMapperUtil.toJson(list);
            jedis.set(key,json);
            Long endTime = System.currentTimeMillis();
            System.out.println("查询时间:"+(endTime-startTime));
        }
        return list;
    }*/
}
